#!/usr/bin/env python
#-*- coding: utf-8 -*-
'''=========================
@Time : 2020/7/18 19:47
@Coder: xh
@IDE  : PyCharm
========================='''
import os
import sys
import time
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from selenium import webdriver

import requests
from urllib.request import urlretrieve
from music_load import *# 导入ui转换的py

# class MyWindows(Ui_MainWindow, QMainWindow):
#     def __init__(self):
#         super(MyWindows, self).__init__()
#         self.setupUi(self)

def get_music_info():
    options = webdriver.ChromeOptions()
    options.add_experimental_option('excludeSwitches', ['enable-logging'])
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    input_name = ui.lineEdit.text()
    url = 'https://music.163.com/#/search/m/?s={}&type=1'.format(input_name)
    driver.get(url)
    driver.switch_to.frame('g_iframe')
    try:
        music_id = driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div/div/div[1]/div[2]/div/div/a').get_attribute('href')
        music_id = music_id.strip('/song?id=')
        music_name =driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/div/div/div[1]/div[2]/div/div/a/b/span').text
    except ValueError as r:
        ui.textBrowser.append(r)  # 在指定的区域显示提示信息
        cursor = ui.textBrowser.textCursor()
        ui.textBrowser.moveCursor(cursor.End)
        urlretrieve(music_url, path)
    driver.close()
    return music_name,music_id

def download_music():
    music_name,music_id = get_music_info()
    # music_url = 'https://music.163.com/song/media/outer/url?id={}.mp3'.format(music_id)

    music_url = 'https://music.163.com/song/media/outer/url?id=22453837.mp3'
    os.makedirs('music',exist_ok=True)
    path = 'music/{}.mp3'.format(music_name)
    mes2 = '正在下载歌曲： {}'.format(music_name)
    ui.textBrowser.append(mes2)  # 在指定的区域显示提示信息
    cursor = ui.textBrowser.textCursor()
    ui.textBrowser.moveCursor(cursor.End)
    # urlretrieve(music_url,path)
    try:
        res = requests.get(music_url, stream=True)
        with open(path, 'wb') as fd:
            for chunk in res.iter_content():
                fd.write(chunk)
        mes3 = '下载完成，请查看！'
    except:
        mes3 = '下载失败，请重试！'
    ui.textBrowser.append(mes3)  # 在指定的区域显示提示信息
    cursor = ui.textBrowser.textCursor()
    ui.textBrowser.moveCursor(cursor.End)



if __name__ == '__main__':

    app = QApplication(sys.argv)#每个PyQt5应用程序必须创建一个应用程序对象。 sys.argv参数是来自命令行的参数列表。这句话能让我们的程序从命令行启动。
    MainWindow = QMainWindow()
    MainWindow.show()# 在屏幕上显示窗口小部件。 一个小部件首先在内存中创建，然后在屏幕上显示。
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    ui.pushButton.clicked.connect(download_music)

    sys.exit(app.exec_())#sys.exit确保一个干净的退出。 exec_有一个下划线。 这是因为exec是一个Python关键字。


